package top.kaoshanji.ch01.streams;

import com.google.common.io.Resources;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * 代码清单 ch01-01：一个简单的流示例(1.1节、统计单词长度大于多少的数量)
 * author kaoshanji
 * ^_^
 * create time 2024/12/5 8:50
 */
public class CountLongWords {

    private static final Logger logger = LogManager.getLogger(CountLongWords.class);

    // 统计的文件
    static final String FILE_NAME = "gutenberg/alice30.txt";

    public static void main(String[] args) throws IOException {
        logger.info("...代码清单 ch01-01：一个简单的流示例(1.1节、统计单词长度大于多少的数量)...");

        // 读取文件内容
        String fileContent = Resources.toString(Resources.getResource(FILE_NAME), StandardCharsets.UTF_8);

        // var contents = Files.readString(Paths.get(resource.getPath()));
        List<String> words = List.of(fileContent.split("\\PL+"));

        long count = 0;
        // 通过遍历的方式统计
        for (String w: words) {
            if (w.length() > 12) {
                count++;
            }
        }
        System.out.println("通过遍历的方式统计: " + count);

        // 通过流操作的方式统计...嗯，与遍历的方式对比一下，就明显看到区别了
        count = words.stream().filter(w -> w.length() > 12).count();
        System.out.println("通过流操作的方式统计: " + count);

        // 通过并行流的方式统计...嗯，与流操作对比一下...
        count = words.parallelStream().filter(w -> w.length() > 12).count();
        System.out.println("通过并行流的方式统计: " + count);


    }

}
